import java.util.Objects;

public class EqualsMethod {

}
class Person {
    String name;
    int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public Person() {
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

/*
在Java中，
hashCode()方法是定义在Object类中的，因此所有的Java对象都具有hashCode()方法。
默认情况下，hashCode()方法会返回对象的内存地址经过哈希算法计算得到的值，
但是可以根据需要在自定义类中重写hashCode()方法以提供更合适的哈希码计算逻辑。

在重写hashCode()方法时，通常需要遵循以下规则：
    1.如果两个对象根据equals()方法是相等的，则它们的哈希码必须相等。
    2.如果两个对象根据equals()方法是不相等的，它们的哈希码可以相等也可以不相等，

    但是为了提高哈希表的性能，最好让不相等的对象的哈希码尽可能不相等。
    在实际编程中，当自定义类需要作为哈希表的键或存储在哈希集合中时，
    通常需要重写hashCode()方法和equals()方法，以确保对象在哈希表中的正确存储和检索。

    *需要注意的是，当重写equals方法时，通常也需要重写hashCode方法，
        以确保满足哈希码的唯一性和一致性要求。如果不重写hashCode方法，而只重写了equals方法，可能会导致在哈希表等数据结构中出现错误的行为。
*/
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Person person = (Person) o;
        return age == person.age && Objects.equals(name, person.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }
}
